home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-10-30 | 45.7 KB | 1,255 lines |
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- ExtUtils::MakeMaker - create an extension Makefile
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use ExtUtils::MakeMaker;
-
- _W_r_i_t_e_M_a_k_e_f_i_l_e( ATTRIBUTE => VALUE [, ...] );
-
- which is really
-
- MM->_n_e_w(\%att)->flush;
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- This utility is designed to write a Makefile for an extension module from
- a Makefile.PL. It is based on the Makefile.SH model provided by Andy
- Dougherty and the perl5-porters.
-
- It splits the task of generating the Makefile into several subroutines
- that can be individually overridden. Each subroutine returns the text it
- wishes to have written to the Makefile.
-
- MakeMaker is object oriented. Each directory below the current directory
- that contains a Makefile.PL. Is treated as a separate object. This makes
- it possible to write an unlimited number of Makefiles with a single
- invocation of _W_r_i_t_e_M_a_k_e_f_i_l_e().
-
- HHHHoooowwww TTTToooo WWWWrrrriiiitttteeee AAAA MMMMaaaakkkkeeeeffffiiiilllleeee....PPPPLLLL
-
- The short answer is: Don't.
-
- Always begin with h2xs.
- Always begin with h2xs!
- ALWAYS BEGIN WITH H2XS!
-
- even if you're not building around a header file, and even if you don't
- have an XS component.
-
- Run _h_2_x_s(1) before you start thinking about writing a module. For so
- called pm-only modules that consist of *.pm files only, h2xs has the -X
- switch. This will generate dummy files of all kinds that are useful for
- the module developer.
-
- The medium answer is:
-
- use ExtUtils::MakeMaker;
- WriteMakefile( NAME => "Foo::Bar" );
-
- The long answer is the rest of the manpage :-)
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- DDDDeeeeffffaaaauuuulllltttt MMMMaaaakkkkeeeeffffiiiilllleeee BBBBeeeehhhhaaaavvvviiiioooouuuurrrr
-
- The generated Makefile enables the user of the extension to invoke
-
- perl Makefile.PL # optionally "perl Makefile.PL verbose"
- make
- make test # optionally set TEST_VERBOSE=1
- make install # See below
-
- The Makefile to be produced may be altered by adding arguments of the
- form KEY=VALUE. E.g.
-
- perl Makefile.PL PREFIX=/tmp/myperl5
-
- Other interesting targets in the generated Makefile are
-
- make config # to check if the Makefile is up-to-date
- make clean # delete local temp files (Makefile gets renamed)
- make realclean # delete derived files (including ./blib)
- make ci # check in all the files in the MANIFEST file
- make dist # see below the Distribution Support section
-
-
- mmmmaaaakkkkeeee tttteeeesssstttt
-
- MakeMaker checks for the existence of a file named _t_e_s_t._p_l in the current
- directory and if it exists it adds commands to the test target of the
- generated Makefile that will execute the script with the proper set of
- perl -I options.
-
- MakeMaker also checks for any files matching _g_l_o_b("t/*.t"). It will add
- commands to the test target of the generated Makefile that execute all
- matching files via the the _T_e_s_t::_H_a_r_n_e_s_s manpage module with the -I
- switches set correctly.
-
- mmmmaaaakkkkeeee tttteeeessssttttddddbbbb
-
- A useful variation of the above is the target testdb. It runs the test
- under the Perl debugger (see the _p_e_r_l_d_e_b_u_g manpage). If the file _t_e_s_t._p_l
- exists in the current directory, it is used for the test.
-
- If you want to debug some other testfile, set TEST_FILE variable thusly:
-
- make testdb TEST_FILE=t/mytest.t
-
- By default the debugger is called using -d option to perl. If you want to
- specify some other option, set TESTDB_SW variable:
-
- make testdb TESTDB_SW=-Dx
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- mmmmaaaakkkkeeee iiiinnnnssssttttaaaallllllll
-
- make alone puts all relevant files into directories that are named by the
- macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR, and
- INST_MAN3DIR. All these default to something below ./blib if you are _n_o_t
- building below the perl source directory. If you _a_r_e building below the
- perl source, INST_LIB and INST_ARCHLIB default to
- ../../lib, and INST_SCRIPT is not defined.
-
- The _i_n_s_t_a_l_l target of the generated Makefile copies the files found below
- each of the INST_* directories to their INSTALL* counterparts. Which
- counterparts are chosen depends on the setting of INSTALLDIRS according
- to the following table:
-
- INSTALLDIRS set to
- perl site
-
- INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH
- INST_LIB INSTALLPRIVLIB INSTALLSITELIB
- INST_BIN INSTALLBIN
- INST_SCRIPT INSTALLSCRIPT
- INST_MAN1DIR INSTALLMAN1DIR
- INST_MAN3DIR INSTALLMAN3DIR
-
- The INSTALL... macros in turn default to their %Config
- ($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
-
- You can check the values of these variables on your system with
-
- perl '-V:install.*'
-
- And to check the sequence in which the library directories are searched
- by perl, run
-
- perl -le 'print join $/, @INC'
-
-
- PPPPRRRREEEEFFFFIIIIXXXX aaaannnndddd LLLLIIIIBBBB aaaattttttttrrrriiiibbbbuuuutttteeee
-
- PREFIX and LIB can be used to set several INSTALL* attributes in one go.
- The quickest way to install a module in a non-standard place might be
-
- perl Makefile.PL LIB=~/lib
-
- This will install the module's architecture-independent files into ~/lib,
- the architecture-dependent files into ~/lib/$archname/auto.
-
- Another way to specify many INSTALL directories with a single parameter
- is PREFIX.
-
-
-
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- perl Makefile.PL PREFIX=~
-
- This will replace the string specified by $Config{prefix} in all
- $Config{install*} values.
-
- Note, that in both cases the tilde expansion is done by MakeMaker, not by
- perl by default, nor by make. Conflicts between parmeters LIB, PREFIX and
- the various INSTALL* arguments are resolved so that XXX
-
- If the user has superuser privileges, and is not working on AFS (Andrew
- File System) or relatives, then the defaults for INSTALLPRIVLIB,
- INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate, and this
- incantation will be the best:
-
- perl Makefile.PL; make; make test
- make install
-
- make install per default writes some documentation of what has been done
- into the file $(INSTALLARCHLIB)/perllocal.pod. This feature can be
- bypassed by calling make pure_install.
-
- AAAAFFFFSSSS uuuusssseeeerrrrssss
-
- will have to specify the installation directories as these most probably
- have changed since perl itself has been installed. They will have to do
- this by calling
-
- perl Makefile.PL INSTALLSITELIB=/afs/here/today \
- INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
- make
-
- Be careful to repeat this procedure every time you recompile an
- extension, unless you are sure the AFS installation directories are still
- valid.
-
- SSSSttttaaaattttiiiicccc LLLLiiiinnnnkkkkiiiinnnngggg ooooffff aaaa nnnneeeewwww PPPPeeeerrrrllll BBBBiiiinnnnaaaarrrryyyy
-
- An extension that is built with the above steps is ready to use on
- systems supporting dynamic loading. On systems that do not support
- dynamic loading, any newly created extension has to be linked together
- with the available resources. MakeMaker supports the linking process by
- creating appropriate targets in the Makefile whenever an extension is
- built. You can invoke the corresponding section of the makefile with
-
- make perl
-
- That produces a new perl binary in the current directory with all
- extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP, and
- PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on UNIX, this
- is called Makefile.aperl (may be system dependent). If you want to force
- the creation of a new perl, it is recommended, that you delete this
- Makefile.aperl, so the directories are searched-through for linkable
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- libraries again.
-
- The binary can be installed into the directory where perl normally
- resides on your machine with
-
- make inst_perl
-
- To produce a perl binary with a different name than perl, either say
-
- perl Makefile.PL MAP_TARGET=myperl
- make myperl
- make inst_perl
-
- or say
-
- perl Makefile.PL
- make myperl MAP_TARGET=myperl
- make inst_perl MAP_TARGET=myperl
-
- In any case you will be prompted with the correct invocation of the
- inst_perl target that installs the new binary into INSTALLBIN.
-
- make inst_perl per default writes some documentation of what has been
- done into the file $(INSTALLARCHLIB)/perllocal.pod. This can be bypassed
- by calling make pure_inst_perl.
-
- Warning: the inst_perl: target will most probably overwrite your existing
- perl binary. Use with care!
-
- Sometimes you might want to build a statically linked perl although your
- system supports dynamic loading. In this case you may explicitly set the
- linktype with the invocation of the Makefile.PL or make:
-
- perl Makefile.PL LINKTYPE=static # recommended
-
- or
-
- make LINKTYPE=static # works on most systems
-
-
- DDDDeeeetttteeeerrrrmmmmiiiinnnnaaaattttiiiioooonnnn ooooffff PPPPeeeerrrrllll LLLLiiiibbbbrrrraaaarrrryyyy aaaannnndddd IIIInnnnssssttttaaaallllllllaaaattttiiiioooonnnn LLLLooooccccaaaattttiiiioooonnnnssss
-
- MakeMaker needs to know, or to guess, where certain things are located.
- Especially INST_LIB and INST_ARCHLIB (where to put the files during the
- _m_a_k_e(1) run), PERL_LIB and PERL_ARCHLIB (where to read existing modules
- from), and PERL_INC (header files and libperl*.*).
-
- Extensions may be built either using the contents of the perl source
- directory tree or from the installed perl library. The recommended way is
- to build extensions after you have run 'make install' on perl itself. You
- can do that in any directory on your hard disk that is not below the perl
- source tree. The support for extensions below the ext directory of the
-
-
-
- PPPPaaaaggggeeee 5555
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- perl distribution is only good for the standard extensions that come with
- perl.
-
- If an extension is being built below the ext/ directory of the perl
- source then MakeMaker will set PERL_SRC automatically (e.g., ../..). If
- PERL_SRC is defined and the extension is recognized as a standard
- extension, then other variables default to the following:
-
- PERL_INC = PERL_SRC
- PERL_LIB = PERL_SRC/lib
- PERL_ARCHLIB = PERL_SRC/lib
- INST_LIB = PERL_LIB
- INST_ARCHLIB = PERL_ARCHLIB
-
- If an extension is being built away from the perl source then MakeMaker
- will leave PERL_SRC undefined and default to using the installed copy of
- the perl library. The other variables default to the following:
-
- PERL_INC = $archlibexp/CORE
- PERL_LIB = $privlibexp
- PERL_ARCHLIB = $archlibexp
- INST_LIB = ./blib/lib
- INST_ARCHLIB = ./blib/arch
-
- If perl has not yet been installed then PERL_SRC can be defined on the
- command line as shown in the previous section.
-
- WWWWhhhhiiiicccchhhh aaaarrrrcccchhhhiiiitttteeeeccccttttuuuurrrreeee ddddeeeeppppeeeennnnddddeeeennnntttt ddddiiiirrrreeeeccccttttoooorrrryyyy????
-
- If you don't want to keep the defaults for the INSTALL* macros, MakeMaker
- helps you to minimize the typing needed: the usual relationship between
- INSTALLPRIVLIB and INSTALLARCHLIB is determined by Configure at perl
- compilation time. MakeMaker supports the user who sets INSTALLPRIVLIB. If
- INSTALLPRIVLIB is set, but INSTALLARCHLIB not, then MakeMaker defaults
- the latter to be the same subdirectory of INSTALLPRIVLIB as Configure
- decided for the counterparts in %Config , otherwise it defaults to
- INSTALLPRIVLIB. The same relationship holds for INSTALLSITELIB and
- INSTALLSITEARCH.
-
- MakeMaker gives you much more freedom than needed to configure internal
- variables and get different results. It is worth to mention, that _m_a_k_e(1)
- also lets you configure most of the variables that are used in the
- Makefile. But in the majority of situations this will not be necessary,
- and should only be done, if the author of a package recommends it (or you
- know what you're doing).
-
- UUUUssssiiiinnnngggg AAAAttttttttrrrriiiibbbbuuuutttteeeessss aaaannnndddd PPPPaaaarrrraaaammmmeeeetttteeeerrrrssss
-
- The following attributes can be specified as arguments to _W_r_i_t_e_M_a_k_e_f_i_l_e()
- or as NAME=VALUE pairs on the command line:
-
-
-
-
-
- PPPPaaaaggggeeee 6666
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- C Ref to array of *.c file names. Initialised from a directory scan and
- the values portion of the XS attribute hash. This is not currently used
- by MakeMaker but may be handy in Makefile.PLs.
-
- CCFLAGS
- String that will be included in the compiler call command line between
- the arguments INC and OPTIMIZE.
-
- CONFIG
- Arrayref. E.g. [_q_w(archname manext)] defines ARCHNAME & MANEXT from
- config.sh. MakeMaker will add to CONFIG the following values anyway:
- ar cc cccdlflags ccdlflags dlext dlsrc ld lddlflags ldflags libc
- lib_ext obj_ext ranlib sitelibexp sitearchexp so
-
- CONFIGURE
- CODE reference. The subroutine should return a hash reference. The hash
- may contain further attributes, e.g. {LIBS => ...}, that have to be
- determined by some evaluation method.
-
- DEFINE
- Something like "-DHAVE_UNISTD_H"
-
- DIR
- Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm' ]
- in ext/SDBM_File
-
- DISTNAME
- Your name for distributing the package (by tar file). This defaults to
- NAME above.
-
- DL_FUNCS
- Hashref of symbol names for routines to be made available as universal
- symbols. Each key/value pair consists of the package name and an array
- of routine names in that package. Used only under AIX (export lists)
- and VMS (linker options) at present. The routine names supplied will
- be expanded in the same way as XSUB names are expanded by the _X_S()
- macro. Defaults to
-
- {"$(NAME)" => ["boot_$(NAME)" ] }
-
- e.g.
-
- {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
- "NetconfigPtr" => [ 'DESTROY'] }
-
-
- DL_VARS
- Array of symbol names for variables to be made available as universal
- symbols. Used only under AIX (export lists) and VMS (linker options)
- at present. Defaults to []. (e.g. [ _q_w( Foo_version Foo_numstreams
- Foo_tree ) ])
-
-
-
-
- PPPPaaaaggggeeee 7777
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- EXCLUDE_EXT
- Array of extension names to exclude when doing a static build. This is
- ignored if INCLUDE_EXT is present. Consult INCLUDE_EXT for more
- details. (e.g. [ _q_w( Socket POSIX ) ] )
-
- This attribute may be most useful when specified as a string on the
- commandline: perl Makefile.PL EXCLUDE_EXT='Socket Safe'
-
- EXE_FILES
- Ref to array of executable files. The files will be copied to the
- INST_SCRIPT directory. Make realclean will delete them from there
- again.
-
- NO_VC
- In general any generated Makefile checks for the current version of
- MakeMaker and the version the Makefile was built under. If NO_VC is
- set, the version check is neglected. Do not write this into your
- Makefile.PL, use it interactively instead.
-
- FIRST_MAKEFILE
- The name of the Makefile to be produced. Defaults to the contents of
- MAKEFILE, but can be overridden. This is used for the second Makefile
- that will be produced for the MAP_TARGET.
-
- FULLPERL
- Perl binary able to run this extension.
-
- H Ref to array of *.h file names. Similar to C.
-
- IMPORTS
- IMPORTS is only used on OS/2.
-
- INC
- Include file dirs eg: "-I/usr/5include -I/path/to/inc"
-
- INCLUDE_EXT
- Array of extension names to be included when doing a static build.
- MakeMaker will normally build with all of the installed extensions when
- doing a static build, and that is usually the desired behavior. If
- INCLUDE_EXT is present then MakeMaker will build only with those
- extensions which are explicitly mentioned. (e.g. [ _q_w( Socket POSIX )
- ])
-
- It is not necessary to mention DynaLoader or the current extension when
- filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty
- then only DynaLoader and the current extension will be included in the
- build.
-
- This attribute may be most useful when specified as a string on the
- commandline: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
-
-
-
-
-
- PPPPaaaaggggeeee 8888
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- INSTALLARCHLIB
- Used by 'make install', which copies files from INST_ARCHLIB to this
- directory if INSTALLDIRS is set to perl.
-
- INSTALLBIN
- Directory to install binary files (e.g. tkperl) into.
-
- INSTALLDIRS
- Determines which of the two sets of installation directories to choose:
- installprivlib and installarchlib versus installsitelib and
- installsitearch. The first pair is chosen with INSTALLDIRS=perl, the
- second with INSTALLDIRS=site. Default is site.
-
- INSTALLMAN1DIR
- This directory gets the man pages at 'make install' time. Defaults to
- $Config{installman1dir}.
-
- INSTALLMAN3DIR
- This directory gets the man pages at 'make install' time. Defaults to
- $Config{installman3dir}.
-
- INSTALLPRIVLIB
- Used by 'make install', which copies files from INST_LIB to this
- directory if INSTALLDIRS is set to perl.
-
- INSTALLSCRIPT
- Used by 'make install' which copies files from INST_SCRIPT to this
- directory.
-
- INSTALLSITELIB
- Used by 'make install', which copies files from INST_LIB to this
- directory if INSTALLDIRS is set to site (default).
-
- INSTALLSITEARCH
- Used by 'make install', which copies files from INST_ARCHLIB to this
- directory if INSTALLDIRS is set to site (default).
-
- INST_ARCHLIB
- Same as INST_LIB for architecture dependent files.
-
- INST_BIN
- Directory to put real binary files during 'make'. These will be copied
- to INSTALLBIN during 'make install'
-
- INST_EXE
- Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you
- need to use it.
-
- INST_LIB
- Directory where we put library files of this extension while building
- it.
-
-
-
-
- PPPPaaaaggggeeee 9999
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- INST_MAN1DIR
- Directory to hold the man pages at 'make' time
-
- INST_MAN3DIR
- Directory to hold the man pages at 'make' time
-
- INST_SCRIPT
- Directory, where executable files should be installed during 'make'.
- Defaults to "./blib/bin", just to have a dummy location during testing.
- make install will copy the files in INST_SCRIPT to INSTALLSCRIPT.
-
- LDFROM
- defaults to "$(OBJECT)" and is used in the ld command to specify what
- files to link/load from (also see dynamic_lib below for how to specify
- ld flags)
-
- LIBPERL_A
- The filename of the perllibrary that will be used together with this
- extension. Defaults to libperl.a.
-
- LIB
- LIB can only be set at perl Makefile.PL time. It has the effect of
- setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless
- any
-
- LIBS
- An anonymous array of alternative library specifications to be searched
- for (in order) until at least one library is found. E.g.
-
- 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
-
- Mind, that any element of the array contains a complete set of
- arguments for the ld command. So do not specify
-
- 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
-
- See ODBM_File/Makefile.PL for an example, where an array is needed. If
- you specify a scalar as in
-
- 'LIBS' => "-ltcl -ltk -lX11"
-
- MakeMaker will turn it into an array with one element.
-
- LINKTYPE
- 'static' or 'dynamic' (default unless usedl=undef in config.sh). Should
- only be used to force static linking (also see linkext below).
-
- MAKEAPERL
- Boolean which tells MakeMaker, that it should include the rules to make
- a perl. This is handled automatically as a switch by MakeMaker. The
- user normally does not need it.
-
-
-
-
- PPPPaaaaggggeeee 11110000
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- MAKEFILE
- The name of the Makefile to be produced.
-
- MAN1PODS
- Hashref of pod-containing files. MakeMaker will default this to all
- EXE_FILES files that include POD directives. The files listed here will
- be converted to man pages and installed as was requested at Configure
- time.
-
- MAN3PODS
- Hashref of .pm and .pod files. MakeMaker will default this to all
- .pod and any .pm files that include POD directives. The files listed
- here will be converted to man pages and installed as was requested at
- Configure time.
-
- MAP_TARGET
- If it is intended, that a new perl binary be produced, this variable
- may hold a name for that binary. Defaults to perl
-
- MYEXTLIB
- If the extension links to a library that it builds set this to the name
- of the library (see SDBM_File)
-
- NAME
- Perl module name for this extension (DBD::Oracle). This will default to
- the directory name but should be explicitly defined in the Makefile.PL.
-
- NEEDS_LINKING
- MakeMaker will figure out, if an extension contains linkable code
- anywhere down the directory tree, and will set this variable
- accordingly, but you can speed it up a very little bit, if you define
- this boolean variable yourself.
-
- NOECHO
- Defaults to @. By setting it to an empty string you can generate a
- Makefile that echos all commands. Mainly used in debugging MakeMaker
- itself.
-
- NORECURS
- Boolean. Attribute to inhibit descending into subdirectories.
-
- OBJECT
- List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a
- long string containing all object files, e.g. "tkpBind.o tkpButton.o
- tkpCanvas.o"
-
- OPTIMIZE
- Defaults to -O. Set it to -g to turn debugging on. The flag is passed
- to subdirectory makes.
-
-
-
-
-
-
- PPPPaaaaggggeeee 11111111
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- PERL
- Perl binary for tasks that can be done by miniperl
-
- PERLMAINCC
- The call to the program that is able to compile perlmain.c. Defaults to
- $(CC).
-
- PERL_ARCHLIB
- Same as above for architecture dependent files
-
- PERL_LIB
- Directory containing the Perl library to use.
-
- PERL_SRC
- Directory containing the Perl source code (use of this should be
- avoided, it may be undefined)
-
- PL_FILES
- Ref to hash of files to be processed as perl programs. MakeMaker will
- default to any found *.PL file (except Makefile.PL) being keys and the
- basename of the file being the value. E.g.
-
- {'foobar.PL' => 'foobar'}
-
- The *.PL files are expected to produce output to the target files
- themselves.
-
- PM
- Hashref of .pm files and *.pl files to be installed. e.g.
-
- {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
-
- By default this will include *.pm and *.pl. If a lib directory exists
- and is not listed in DIR (above) then any *.pm and *.pl files it
- contains will also be included by default. Defining PM in the
- Makefile.PL will override PMLIBDIRS.
-
- PMLIBDIRS
- Ref to array of subdirectories containing library files. Defaults to [
- 'lib', $(BASEEXT) ]. The directories will be scanned and any files they
- contain will be installed in the corresponding location in the library.
- A _l_i_b_s_c_a_n() method can be used to alter the behaviour. Defining PM in
- the Makefile.PL will override PMLIBDIRS.
-
- PREFIX
- Can be used to set the three INSTALL* attributes in one go (except for
- probably INSTALLMAN1DIR, if it is not below PREFIX according to
- %Config). They will have PREFIX as a common directory node and will
- branch from that node into lib/, lib/ARCHNAME or whatever Configure
- decided at the build time of your perl (unless you override one of
- them, of course).
-
-
-
-
- PPPPaaaaggggeeee 11112222
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- PREREQ_PM
- Hashref: Names of modules that need to be available to run this
- extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
- desired version is the value. If the required version number is 0, we
- only check if any version is installed already.
-
- SKIP
- Arryref. E.g. [_q_w(name1 name2)] skip (do not write) sections of the
- Makefile. Caution! Do not use the SKIP attribute for the neglectible
- speedup. It may seriously damage the resulting Makefile. Only use it,
- if you really need it.
-
- TYPEMAPS
- Ref to array of typemap file names. Use this when the typemaps are in
- some directory other than the current directory or when they are not
- named ttttyyyyppppeeeemmmmaaaapppp. The last typemap in the list takes precedence. A
- typemap in the current directory has highest precedence, even if it
- isn't listed in TYPEMAPS. The default system typemap has lowest
- precedence.
-
- VERSION
- Your version number for distributing the package. This defaults to
- 0.1.
-
- VERSION_FROM
- Instead of specifying the VERSION in the Makefile.PL you can let
- MakeMaker parse a file to determine the version number. The parsing
- routine requires that the file named by VERSION_FROM contains one
- single line to compute the version number. The first line in the file
- that contains the regular expression
-
- /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
-
- will be evaluated with _e_v_a_l() and the value of the named variable aaaafffftttteeeerrrr
- the _e_v_a_l() will be assigned to the VERSION attribute of the MakeMaker
- object. The following lines will be parsed o.k.:
-
- $VERSION = '1.00';
- *VERSION = \'1.01';
- ( $VERSION ) = '$Revision: 1.216 $ ' =~ /\$Revision:\s+([^\s]+)/;
- $FOO::VERSION = '1.10';
- *FOO::VERSION = \'1.11';
-
- but these will fail:
-
- my $VERSION = '1.01';
- local $VERSION = '1.02';
- local $FOO::VERSION = '1.30';
-
- The file named in VERSION_FROM is not added as a dependency to
- Makefile. This is not really correct, but it would be a major pain
- during development to have to rewrite the Makefile for any smallish
-
-
-
- PPPPaaaaggggeeee 11113333
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- change in that file. If you want to make sure that the Makefile
- contains the correct VERSION macro after any change of the file, you
- would have to do something like
-
- depend => { Makefile => '$(VERSION_FROM)' }
-
- See attribute depend below.
-
- XS
- Hashref of .xs files. MakeMaker will default this. e.g.
-
- {'name_of_file.xs' => 'name_of_file.c'}
-
- The .c files will automatically be included in the list of files
- deleted by a make clean.
-
- XSOPT
- String of options to pass to xsubpp. This might include -C++ or
- -extern. Do not include typemaps here; the TYPEMAP parameter exists
- for that purpose.
-
- XSPROTOARG
- May be set to an empty string, which is identical to -prototypes, or
- -noprototypes. See the xsubpp documentation for details. MakeMaker
- defaults to the empty string.
-
- XS_VERSION
- Your version number for the .xs file of this package. This defaults to
- the value of the VERSION attribute.
-
- AAAAddddddddiiiittttiiiioooonnnnaaaallll lllloooowwwweeeerrrrccccaaaasssseeee aaaattttttttrrrriiiibbbbuuuutttteeeessss
-
- can be used to pass parameters to the methods which implement that part
- of the Makefile.
-
- clean
-
- {FILES => "*.xyz foo"}
-
-
- depend
-
- {ANY_TARGET => ANY_DEPENDECY, ...}
-
-
- dist
-
- {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => 'gz',
- SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
- ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
-
- If you specify COMPRESS, then SUFFIX should also be altered, as it is
-
-
-
- PPPPaaaaggggeeee 11114444
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- needed to tell make the target file of the compression. Setting DIST_CP
- to ln can be useful, if you need to preserve the timestamps on your
- files. DIST_CP can take the values 'cp', which copies the file, 'ln',
- which links the file, and 'best' which copies symbolic links and links
- the rest. Default is 'best'.
-
- dynamic_lib
-
- {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
-
-
- installpm
- Deprecated as of MakeMaker 5.23. See the pm_to_blib entry in the
- _E_x_t_U_t_i_l_s::_M_M__U_n_i_x manpage.
-
- linkext
-
- {LINKTYPE => 'static', 'dynamic' or ''}
-
- NB: Extensions that have nothing but *.pm files had to say
-
- {LINKTYPE => ''}
-
- with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
- can be deleted safely. MakeMaker recognizes, when there's nothing to be
- linked.
-
- macro
-
- {ANY_MACRO => ANY_VALUE, ...}
-
-
- realclean
-
- {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
-
-
- tool_autosplit
-
- {MAXLEN =E<gt> 8}
-
-
- OOOOvvvveeeerrrrrrrriiiiddddiiiinnnngggg MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr MMMMeeeetttthhhhooooddddssss
-
- If you cannot achieve the desired Makefile behaviour by specifying
- attributes you may define private subroutines in the Makefile.PL. Each
- subroutines returns the text it wishes to have written to the Makefile.
- To override a section of the Makefile you can either say:
-
- sub MY::c_o { "new literal text" }
-
- or you can edit the default by saying something like:
-
-
-
- PPPPaaaaggggeeee 11115555
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- sub MY::c_o {
- package MY; # so that "SUPER" works right
- my $inherited = shift->SUPER::c_o(@_);
- $inherited =~ s/old text/new text/;
- $inherited;
- }
-
- If you running experiments with embedding perl as a library into other
- applications, you might find MakeMaker not sufficient. You'd better have
- a look at ExtUtils::embed which is a collection of utilities for
- embedding.
-
- If you still need a different solution, try to develop another
- subroutine, that fits your needs and submit the diffs to _p_e_r_l_5-
- _p_o_r_t_e_r_s@_n_i_c_o_h._c_o_m or _c_o_m_p._l_a_n_g._p_e_r_l._m_i_s_c as appropriate.
-
- For a complete description of all MakeMaker methods see the
- _E_x_t_U_t_i_l_s::_M_M__U_n_i_x manpage.
-
- Here is a simple example of how to add a new target to the generated
- Makefile:
-
- sub MY::postamble {
- '
- $(MYEXTLIB): sdbm/Makefile
- cd sdbm && $(MAKE) all
- ';
- }
-
-
- HHHHiiiinnnnttttssssffffiiiilllleeee ssssuuuuppppppppoooorrrrtttt
-
- MakeMaker.pm uses the architecture specific information from Config.pm.
- In addition it evaluates architecture specific hints files in a hints/
- directory. The hints files are expected to be named like their
- counterparts in PERL_SRC/hints, but with an .pl file name extension (eg.
- next_3_2.pl). They are simply evaled by MakeMaker within the
- _W_r_i_t_e_M_a_k_e_f_i_l_e() subroutine, and can be used to execute commands as well
- as to include special variables. The rules which hintsfile is chosen are
- the same as in Configure.
-
- The hintsfile is _e_v_a_l()ed immediately after the arguments given to
- WriteMakefile are stuffed into a hash reference $self but before this
- reference becomes blessed. So if you want to do the equivalent to
- override or create an attribute you would say something like
-
- $self->{LIBS} = ['-ldbm -lucb -lc'];
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 11116666
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- DDDDiiiissssttttrrrriiiibbbbuuuuttttiiiioooonnnn SSSSuuuuppppppppoooorrrrtttt
-
- For authors of extensions MakeMaker provides several Makefile targets.
- Most of the support comes from the ExtUtils::Manifest module, where
- additional documentation can be found.
-
- make distcheck
- reports which files are below the build directory but not in the
- MANIFEST file and vice versa. (See _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_f_u_l_l_c_h_e_c_k()
- for details)
-
- make skipcheck
- reports which files are skipped due to the entries in the
- MANIFEST.SKIP file (See _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_s_k_i_p_c_h_e_c_k() for details)
-
- make distclean
- does a realclean first and then the distcheck. Note that this is not
- needed to build a new distribution as long as you are sure, that the
- MANIFEST file is ok.
-
- make manifest
- rewrites the MANIFEST file, adding all remaining files found (See
- _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_m_k_m_a_n_i_f_e_s_t() for details)
-
- make distdir
- Copies all the files that are in the MANIFEST file to a newly created
- directory with the name $(DISTNAME)-$(VERSION). If that directory
- exists, it will be removed first.
-
- make disttest
- Makes a distdir first, and runs a perl Makefile.PL, a make, and a
- make test in that directory.
-
- make tardist
- First does a distdir. Then a command $(PREOP) which defaults to a
- null command, followed by $(TOUNIX), which defaults to a null command
- under UNIX, and will convert files in distribution directory to UNIX
- format otherwise. Next it runs tar on that directory into a tarfile
- and deletes the directory. Finishes with a command $(POSTOP) which
- defaults to a null command.
-
- make dist
- Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
-
- make uutardist
- Runs a tardist first and uuencodes the tarfile.
-
- make shdist
- First does a distdir. Then a command $(PREOP) which defaults to a
- null command. Next it runs shar on that directory into a sharfile and
- deletes the intermediate directory again. Finishes with a command
- $(POSTOP) which defaults to a null command. Note: For shdist to work
-
-
-
- PPPPaaaaggggeeee 11117777
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- properly a shar program that can handle directories is mandatory.
-
- make zipdist
- First does a distdir. Then a command $(PREOP) which defaults to a
- null command. Runs $(ZIP) $(ZIPFLAGS) on that directory into a
- zipfile. Then deletes that directory. Finishes with a command
- $(POSTOP) which defaults to a null command.
-
- make ci
- Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
-
- Customization of the dist targets can be done by specifying a hash
- reference to the dist attribute of the WriteMakefile call. The following
- parameters are recognized:
-
- CI ('ci -u')
- COMPRESS ('compress')
- POSTOP ('@ :')
- PREOP ('@ :')
- TO_UNIX (depends on the system)
- RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
- SHAR ('shar')
- SUFFIX ('Z')
- TAR ('tar')
- TARFLAGS ('cvf')
- ZIP ('zip')
- ZIPFLAGS ('-r')
-
- An example:
-
- WriteMakefile( 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })
-
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,
- ExtUtils::Install, ExtUtils::embed
-
- AAAAUUUUTTTTHHHHOOOORRRRSSSS
- Andy Dougherty <_d_o_u_g_h_e_r_a@_l_a_f_c_o_l._l_a_f_a_y_e_t_t_e._e_d_u>, Andreas Koenig
- <_A._K_o_e_n_i_g@_f_r_a_n_z._w_w._T_U-_B_e_r_l_i_n._D_E>, Tim Bunce <_T_i_m._B_u_n_c_e@_i_g._c_o._u_k>. VMS
- support by Charles Bailey <_b_a_i_l_e_y@_g_e_n_e_t_i_c_s._u_p_e_n_n._e_d_u>. OS/2 support by
- Ilya Zakharevich <_i_l_y_a@_m_a_t_h._o_h_i_o-_s_t_a_t_e._e_d_u>. Contact the makemaker
- mailing list mailto:makemaker@franz.ww.tu-berlin.de, if you have any
- questions.
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 11118888
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333)))) EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 11119999
-
-
-
-
-
-
-